﻿using Aeon.Emulator;

namespace Aeon.Configuration
{
    /// <summary>
    /// Describes the configuration of a virtual machine device.
    /// </summary>
    public interface IDeviceConfiguration : IAeonConfiguration
    {
        /// <summary>
        /// Gets the name of the device.
        /// </summary>
        string DeviceName { get; }
        /// <summary>
        /// Gets or sets a value indicating whether the device is enabled.
        /// </summary>
        bool IsEnabled { get; set; }

        /// <summary>
        /// Returns a new instance of the emulated device.
        /// </summary>
        /// <param name="p">Extra parameters which may be used for initialization.</param>
        /// <returns>New instance of the emulated device.</returns>
        IVirtualDevice Create(CreateDeviceParameters p);
        /// <summary>
        /// Returns a deep copy of the device configuration.
        /// </summary>
        /// <returns>Deep copy of the device configuration.</returns>
        IDeviceConfiguration Clone();
    }
}
